package com.guofs.project.common.utils.tree.util;

import com.google.common.collect.BiMap;
import com.guofs.project.common.utils.function.BiPredicate;
import com.guofs.project.common.utils.tree.base.TreeBase;

/**
 * 树工具接口, 相似树的节点模型的比较
 *
 * @param <N> 树的节点泛型
 * @param <K> 树的节点的key值类型的泛型
 *
 * @author 郭芳诗
 * @date 2019/1/21 10:42
 */
public interface TreeUtils<N, K> {

    /**
     * 将两个树的数据进行匹配
     *
     * @param nTree 第一个树的节点
     * @param oTree 另一个树的节点
     * @param predicate 匹配条件
     * @param rootIgnoreFlag 树根节点跳过匹配，true为跳过
     * @return 匹配后的结果, 对照表，入参前者对后者
     */
    BiMap<K, K> match(TreeBase<N, K> nTree,
                      TreeBase<N, K> oTree,
                      BiPredicate<N, N> predicate,
                      boolean rootIgnoreFlag);

}
